function lik = tvp_like(parm,y,x,start,priorb0,priorv0)
% PURPOSE: returns -log likelihood function for tvp model
% -------------------------------------------------------
% USAGE: llike = tvp_like(parm,y,x,start)
% where: parm = a vector of parmaeters
%        parm(1) = sig epsilson
%        parm(2) = sig beta 1
%        parm(3) = sig beta 2
%        .
%        .
%        .
%        parm(k) = sig beta k
%        start   = # of observation to start at
%                  (default: 2*k+1)
%        priorb0   = (k x 1) vector with prior b0          
%        priorv0   = (k x k) matrix with prior variance
%                  for sigb                            
% ----------------------------------------------------
% RETURNS: -log likelihood function value (a scalar)                  
% ----------------------------------------------------
% REFERENCES: Kim and Nelson (1999)
% State-Space Models with Regime Switching
% ----------------------------------------------------

% written by:
% James P. LeSage, Dept of Economics
% Texas State University-San Marcos
% 601 University Drive
% San Marcos, TX 78666
% jlesage@spatial-econometrics.com


sige = parm(1);
k = length(parm) - 1;
n = length(y);

if nargin == 4
priorv0 = eye(k)*1e+5;
priorb0 = zeros(k,1);
end;

sigb = zeros(k,1);
for i=1:k;
sigb(i,1) = parm(i+1,1);
end;

f = eye(k);
rr = sige^2;
qq = diag(sigb.*sigb);
betall = priorb0;  % initial guess for betas
pll    = priorv0;  % prior uncertainty

lik = 0;
for iter = 1:n;
xt = x(iter,:);
yt = y(iter,1);

betatl = f*betall;
ptl = f*pll*f' + qq;
fcast = yt - xt*betatl;
ss = xt*ptl*xt' + rr;
betatt = betatl + (ptl*xt'/ss)*fcast;
ptt = (eye(k) - (ptl*xt'/ss)*xt)*ptl;
betall = betatt;
pll = ptt;

 if iter >= start
 lik = lik + 0.5*(log(2*pi*ss) + (fcast.^2)/ss);
 end;
end;

